<?php

/**
*
* Class de validation de fichiers uploadés grâce à Mac_Form_Element_File
* @author mpheulpin
*
*/
abstract class Mac_Form_Validator_File_Abstract
{
    /**
     * Tableau contenant les informations relatives au fichier sur lequel
     * appliquer les tests
     *
     * @var array Tableau associatif dont les clés sont les suivantes :
     * 				Mac_Form_Validator_File_Abstract::FILENAME : Nom du fichier
     * 				Mac_Form_Validator_File_Abstract::FILESIZE : Taille du fichier en octets
     * 				Mac_Form_Validator_File_Abstract::TMP_NAME : Nom temporaire du fichier sur le serveur
     * 				Mac_Form_Validator_File_Abstract::FILETYPE : Mime Type fourni par le navigateur
     * 				Mac_Form_Validator_File_Abstract::UL_ERROR : Code de retour de PHP pour l'upload
     * 				Mac_Form_Validator_File_Abstract::MIN_SIZE : Taille minimum
     * 				Mac_Form_Validator_File_Abstract::MAX_SIZE : Taille maximum
     * 				Mac_Form_Validator_File_Abstract::FORMATS : Liste des extension acceptées
     * 				Mac_Form_Validator_File_Abstract::DESTINATION : Repertoire de destination du fichier
     * 				Mac_Form_Validator_File_Abstract::TAGTIME : Position du tagtime dans le nom du fichier
     * 				Mac_Form_Validator_File_Abstract::RENAME : Nom du fichier pour renommage
     * 				Mac_Form_Validator_File_Abstract::REQUIRED : Indique si ce champ file est obligatoire dans le formulaire
     *
     * 			Toutes ces valeurs peuvent être consultés mais ne peuvent pas être modifiés dans la methode isValid()
     */
    protected $upload;

    /**
     * Code erreur renvoyé par Mac_Form_Validator_File_Abstract si la methode
     * isValid() retourne false
     * Il est conseillé de le situer entre 201 et 299
     *
     * @var integer
     */
    protected $_errorcode;

    /**
     * Constructeur de la class Mac_Form_Validator_File_Abstract
     *
     * @param integer $code_error Code erreur du validateur
     */
    public function __construct($code_error = 201)
    {
        $this->_file = null;
        $this->_errorcode = $code_error;
    }

    /**
     * Configure le validateur en definissant le fichier à valider
     *
     * @param array $file Tableau associatif representant un fichier uploadé
     */
    public final function setFile($uplaod)
    {
        $this->upload = $file;
        if (isset($this->upload[Mac_Form_Element_File::VALIDATORS])) {
            unset($this->upload[Mac_Form_Element_File::VALIDATORS]);
        }
    }

    /**
     * Getter du code erreur
     *
     * @return integer
     */
    public final function getErrorCode ()
    {
        return $this->_errorcode;
    }
    
    /**
    * Fonction de test à appliquer sur les fichiers uploadés
    *
    * @return bool
    */
    abstract public function isValid();

}